package com.itheima.stock.config;

import com.itheima.stock.pojo.vo.TaskThreadPoolInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

public class TaskExecutePool {

    @Autowired
    private TaskThreadPoolInfo info;

    /*不会立即关闭：shutdown方法不会立即关闭线程池。它首先会拒绝新的任务，但会等待当前正在执行的任务完成。
    等待所有任务完成：只有当前所有正在执行的任务都完成后，线程池才会真正关闭。
    与shutdownNow的区别：与shutdown不同，shutdownNow会尝试停止所有正在执行的任务，并返回那些尚未开始执行的任务列表。这通常用于紧急关闭场景，其中你可能希望立即停止所有任务。
    优雅地关闭：在大多数应用程序中，使用shutdown方法是一种更优雅的方式来关闭线程池，因为它允许正在执行的任务完成其工作。*/

    @Bean(name = "threadPoolTaskExecutor",destroyMethod = "shutdown")
    public ThreadPoolTaskExecutor threadPoolTaskExecutor(){
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setCorePoolSize(info.getCorePoolSize());
        taskExecutor.setMaxPoolSize(info.getMaxPoolSize());
        taskExecutor.setKeepAliveSeconds(info.getKeepAliveSeconds());
        taskExecutor.setQueueCapacity(info.getQueueCapacity());

        taskExecutor.setThreadNamePrefix("StockThread-");
        taskExecutor.initialize();
        return taskExecutor;
    }

}
